local ffi = require "ffi"
local vbar_gpio = ffi.load("gpio")

ffi.cdef [[
   enum gpio_function {
      GPIO_FUNC_0 	= 0x00,
      GPIO_FUNC_1 	= 0x01,
      GPIO_FUNC_2 	= 0x02,
      GPIO_FUNC_3 	= 0x03,
      GPIO_OUTPUT0 	= 0x04,
      GPIO_OUTPUT1 	= 0x05,
      GPIO_INPUT 	= 0x06,
      GPIO_INT_LO 	= 0x08,
      GPIO_INT_HI 	= 0x09,
      GPIO_INT_FE 	= 0x0a,
      GPIO_INT_RE 	= 0x0b,
      GPIO_PULL 	= 0x10,
      GPIO_INPUT_PULL	= 0x16,
  };

    int vbar_gpio_init(void);
    void vbar_gpio_exit(void);
    int vbar_gpio_request(uint32_t gpio);
    void vbar_gpio_set_func(uint32_t gpio,enum gpio_function func);
    void vbar_gpio_set_value(uint32_t gpio, uint8_t value);
    int vbar_gpio_get_value(uint32_t gpio);
]]

local gpio = {}

-- 初始化gpio
function gpio.gpio_init()
  vbar_gpio.vbar_gpio_init()
end

-- 释放gpio资源
function gpio.gpio_exit()
  vbar_gpio.vbar_gpio_exit()
end

-- 注册gpio
function gpio.gpio_request(gpio_enm)
  vbar_gpio.vbar_gpio_request(gpio_enm)
end

-- 释放gpio
function gpio.gpio_free(gpio_enm)
end

-- 设置指定gpio功能
function gpio.gpio_set_func(gpio_enm)
  vbar_gpio.vbar_gpio_set_func(gpio_enm, ffi.C.GPIO_OUTPUT0)
end

-- 设置指定gpio的值
function gpio.gpio_set_value(gpio_enm, value)
  vbar_gpio.vbar_gpio_set_value(gpio_enm, value)
end

-- 获取指定gpio值
function gpio.gpio_get_value(gpio_enm)
  vbar_gpio.vbar_gpio_get_value(gpio_enm)
end

return gpio
